package com.mall.controller;

import com.mall.domain.dto.CartDTO;
import com.mall.domain.dto.UpdateQuantityDTO;
import com.mall.domain.vo.CartVO;
import com.mall.result.PageResult;
import com.mall.result.Result;
import com.mall.service.CartService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @description: 购物车管理控制层
 * @author 勾新杰
 * @version 1.0
 * @date 2024/11/24 20:25
 */
@RestController
@RequestMapping("/cart")
@RequiredArgsConstructor
@Tag(name = "购物车管理", description = "购物车管理相关接口")
public class CartController {

    private final CartService cartService;

    /**
     * 添加购物车
     * @param cartDTO 购物车传输对象
     * @return 添加结果
     */
    @PostMapping("/add")
    @Operation(summary = "添加购物车")
    public Result<String> addCart(@RequestBody CartDTO cartDTO) {
        cartService.addCart(cartDTO);
        return Result.success("添加成功");
    }

    /**
     * 修改购物车条目商品的购买数量
     * @param quantityDTO 修改数量传输对象
     * @return 修改结果
     */
    @PutMapping("/update")
    @Operation(summary = "修改购物车条目商品的购买数量")
    public Result<String> updateQuantity(@RequestBody UpdateQuantityDTO quantityDTO) {
        cartService.updateQuantity(quantityDTO);
        return Result.success("修改成功");
    }

    /**
     * 删除购物车条目
     * @param id 购物车条目id
     * @return 删除结果
     */
    @DeleteMapping("/delete/{id}")
    @Operation(summary = "删除购物车条目")
    public Result<String> deleteCart(@PathVariable Long id) {
        cartService.deleteCart(id);
        return Result.success("删除成功");
    }

    /**
     * 增加购物车条目商品数量
     * @param id 购物车条目id
     * @return 增加结果
     */
    @PutMapping("/increase")
    @Operation(summary = "增加购物车条目商品数量")
    public Result<String> increaseQuantity(Long id) {
        cartService.increaseQuantity(id);
        return Result.success("增加成功");
    }

    /**
     * 减少购物车条目商品数量
     * @param id 购物车条目id
     * @return 减少结果
     */
    @PutMapping("/decrease")
    @Operation(summary = "减少购物车条目商品数量")
    public Result<String> decreaseQuantity(Long id) {
        cartService.decreaseQuantity(id);
        return Result.success("减少成功");
    }

    /**
     * 查询购物车列表
     * @return 购物车列表
     */
    @GetMapping("/list")
    @Operation(summary = "查询购物车列表")
    public Result<List<CartVO>> listCart() {
        List<CartVO> cartList = cartService.listCart();
        return Result.success(cartList);
    }

    /**
     * 清空购物车
     * @return 清空结果
     */
    @DeleteMapping("/clear")
    @Operation(summary = "清空购物车")
    public Result<String> clearCart() {
        cartService.clearCart();
        return Result.success("清空成功");
    }
}
